Today increasingly, a complex large-scale computing environment is composed of multiple systems. These systems are independently developed and interact with each other, as well as interact with the user(s). Each of these systems in the environment manages a great number of resources, and these resources have names. A name may be used by a human to reference the resource in question; it may also be used by machines as a reference, and to resolve to a unique identifier with which to access and manage that resource.
A challenge in such environments is the complexity explosion in naming, both across the systems, and for the user. The issue arises from the fact that each system, because it may be independently built, is free to use its own naming technique (syntax+semantics) for its own resources. This leads to the following sources of complexity:                a. One system may not be able to correctly or accurately reference or include another system's names inside its own names or naming conventions.        b. Due to system-system interactions, each system should be able to understand and resolve names from other systems. Such name resolution may be addressed either by one of two approaches:                    i. having each system understand each other system's naming technique (which is an O(N2) effort if there are N systems), or            ii. creating a monolithic hand-coded naming system for the entire environment: this may need to be done on a case by case basis for each system and is extremely labor-intensive.                        c. A user may have to deal with multiple naming techniques, one for each system, and the user must also maintain an awareness of each system and its associated naming technique.        d. The fully-qualified names from each system, which are the completely unique names given to system resources by the system, can be verbose, making them difficult to read or parse and, in some cases, running into limits on name sizes or message sizes.        